﻿##Version graphique du gestionnaire de bilbiothèque
#Recherche: widget classique entry
#Afficher id, nom livre, nom auteur, nom empr, nom_resa
#affichage de la liste de livre:voir p246 du livre de swinnen
#http://effbot.org/tkinterbook/listbox.htm
# -*- coding:utf-8 -*-
from Tkinter import*
from gestion_bib import*

class Fenetre_main(Tk):
    """création de la fenêtre principale"""
    def __init__(self):
        Tk.__init__(self)

        self.a=gest_bib()
        
        self.B_add=Button(self, bitmap="question",command=self.ajouter_livre)
        self.B_add.grid(sticky=W,column=0)
         
        self.B_rendre=Button(self, bitmap="question",command=self.rendre_livre)
        self.B_rendre.grid(row=0,columnspan=1,sticky=W,padx=25)

        
        
        self.listeB_de_livre=liste_de_livre(self,self.a)
        self.listeB_de_livre.grid(column=0,row=2,columnspan=2,sticky=E+W+S+N)
        
        self.grid_columnconfigure(0,weight=1)
        self.grid_rowconfigure(2,weight=1)
   

    def ajouter_livre(self):
        ##Creer un objet
        self.fen_add = Toplevel(self)
        self.fen_add.wm_attributes('-topmost', 1)
        
        self.ref=lbl_et_entry(self.fen_add,"Référence*")
        self.ref.grid(sticky=W+E,column=0)
        self.nom_livre=lbl_et_entry(self.fen_add,"Nom du livre*")
        self.nom_livre.grid(sticky=W+E,column=0)
        self.nom_auteur=lbl_et_entry(self.fen_add,"Nom de l'auteur*")
        self.nom_auteur.grid(sticky=W+E,column=0)
        self.nom_empr=lbl_et_entry(self.fen_add,"Nom de l'emprunteur")
        self.nom_empr.grid(sticky=W+E,column=0)
        self.nom_resrv=lbl_et_entry(self.fen_add,"Nom du reservant")
        self.nom_resrv.grid(sticky=W+E,column=0)
        self.B_annuler=Button(self.fen_add,text="annuler",
                              command=self.fen_add.destroy)
        self.B_enregistrer=Button(self.fen_add, text="Enregistrer",
                                  command=self.enregistrer)
        self.B_annuler.grid(row=6,sticky=W)
        self.B_enregistrer.grid(row=6,sticky=E)
        #self.fen_add.mainloop()
        self.grid_columnconfigure(0,weight=1)

        
    def enregistrer(self):
        if(str(self.Entrer_ref.get())=='' or
           str(self.Entrer_nom_livre.get())=='' or
           str(self.Entrer_nom_auteur.get())==''):
            self.fen=Tk()
            Label(self.fen,text="les entrées marqué d'un '*' sont obligatoires"
                  ).pack()
            Button(self.fen,text="Ok",command=self.fen.destroy).pack()
        else:
            requete=[]
            try:
                requete.append(eval(self.Entrer_ref.get()))
                requete[0]=self.Entrer_ref.get()
            except:
                self.fen=Tk()
                Label(self.fen,text="La référence doit être un chiffre").pack()
                Button(self.fen,text="Ok",command=self.fen.destroy).pack()
            else:
                requete.append(self.Entrer_nom_livre.get())
                requete.append(self.Entrer_nom_auteur.get())
                requete.append(self.Entrer_nom_empr.get())
                requete.append(self.Entrer_nom_resa.get())
            print(requete)
            if self.a.ajout_base(requete)==0:
                self.fen=Tk()
                Label(self.fen,text="L'opération a échouée, veuillez recomme\
                ncer").pack()
                Button(self.fen,text="Ok",command=self.fen.destroy).pack()
            else:
                self.fen=Tk()
                Label(self.fen,text="Le livre a été ajouté à la bibliothèque!"
                      ).pack()
                Button(self.fen,text="Ok",command=self.fen.destroy).pack()
                
            ##debug##
            self.a.afficher_livre()
            
        self.fen_add.destroy()

    def rendre_livre(self):
        self.fen_rendre=Tk()
        Label(self.fen_rendre,text="Entrez simplement la référence du livre:",
              justify=RIGHT).pack()
        self.Entrer_ref=Entry(self.fen_rendre,width=4)
        self.Entrer_ref.bind("<Return>",self.livre_rendu)
        self.Entrer_ref.pack()
        Button(self.fen_rendre,text="Ok",command=self.livre_rendu).pack()
        

    def livre_rendu(self,event=None):
        if self.a.rendre_livre(self.Entrer_ref.get())==0:
            self.fen=Tk()
            Label(self.fen,text="L'opération a échouée, veuillez recommencer"
                  ).pack()
            Button(self.fen,text="Ok",command=self.fen.destroy).pack()

        else:
            self.fen=Tk()
            Label(self.fen,text="Le livre a été rendu!").pack()
            Button(self.fen,text="Ok",command=self.fen.destroy).pack()
            self.fen_rendre.destroy()
            

class lbl_et_entry(Frame):
    def __init__(self,root,txt):
        Frame.__init__(self,root)
        self.Text=Label(self,text=txt,justify=RIGHT)
        self.Text.grid(sticky=W,row=0,column=0)
        self.Entrer=Entry(self,width=40)
        self.Entrer.grid(sticky=E,row=0,column=1)
        self.grid_columnconfigure(0,weight=1)
        
class liste_de_livre(Frame):
    """Objet affichant les livres disponibles/recherchés"""
    def __init__(self,boss,a):
        #global boss
        Frame.__init__(self,boss)
        self.Champ_recherche=Entry(self)
        self.Champ_recherche.grid(column=0,row=0,sticky=E+W+N)
        #self.Champ_recherche.bind("<return>",self.recherche_livre)

        self.Bouton_recherche=Button(self,text="rechercher")
        self.Bouton_recherche.grid(column=2,row=0,sticky=E+W+N)

        self.liste=a.liste_livre()
        self.a=a
        self.lb=[]
        
        self.frame=Frame(self)
        self.frame.grid(column=0,row=1,sticky=E+W+N+S)
        
        for k in range(len(self.liste[0])):
            self.frame1=Frame(self.frame)
            self.frame1.grid(column=k,row=0,sticky=E+W+N+S)
            Label(self.frame1, text="test", borderwidth=1, relief=RAISED).grid(
                                                column=0,row=0,sticky=E+W+N+S)
            
            lb=Listbox(self.frame1,exportselection=FALSE)
            lb.grid(column=0,row=1,sticky=E+W+N+S)
            lb.bind('<Button-1>',lambda e, s=self: s._select(e.y))
            
            self.frame1.grid_columnconfigure(0,weight=1)
            self.frame1.grid_rowconfigure(1,weight=1)
            self.lb.append(lb)
            
        
            self.frame.grid_columnconfigure(k,weight=1)
        
        self.scrol =Scrollbar(self,command =self.deffile)
        
        self.lb[0].config(yscrollcommand=self.scrol.set)
        self.remplir_listbox(self.liste)
        self.scrol.grid(column=1,row=1,sticky=W+N+S)

        self.frame.grid_rowconfigure(0,weight=1)
        self.grid_columnconfigure(0,weight=1)
        self.grid_rowconfigure(0,weight=1)
        self.grid_rowconfigure(1,weight=1000)

    def deffile(self,*args):
        for k in range(5):
            
            self.lb[k].yview(*args)

    ##Code copié tel quel
    def _select(self, y):
        
        row = self.lb[2].nearest(y)
       
        self.selection_clear(0, END)
        
        self.selection_set(row)
        
        Button(self,text="Emprunter",command=self.emprunter).grid(column=2,row=1
                                                                  ,sticky=E+W+N)
        Button(self,text="Rendre").grid(column=2,row=1,sticky=E+W+N,pady=30)
        Button(self,text="Reserver").grid(column=2,row=1,sticky=E+W+N,pady=60)
        self.index =self.lb[0].curselection()
        print(self.index)
        
        
        
        return 'break'

    def selection_clear(self, first, last=None):
        for l in self.lb:
            l.selection_clear(first, last)

    def selection_set(self, first, last=None):
        for l in self.lb:
            l.selection_set(first, last)
    ##Fin

    def Affiche_bouton_action(self,event=None):
        self.bou=Button(self,text="allo")
        #w.grid_forget()
        self.bou.grid(column=2,row=1,sticky=E+N)

        

    def remplir_listbox(self,liste):
        for i in range(5):
            for k in range(len(liste)):
                self.lb[i].insert(END,liste[k][i])
                
    def emprunter(self):
        self.fen_empr=Tk()
        Label(self.fen_empr,text="Quel est votre nom?").pack()
        self.entrer_nom=Entry(self.fen_empr)
        self.entrer_nom.pack()
        Button(self.fen_empr,text="Ok",command=self.action_empr).pack()
     
    def action_empr(self):
        print(self.liste[int(self.index[0])][0])
        self.a.emprunter_livre(self.liste[int(self.index[0])][0], 
                               self.entrer_nom.get())
        self.fen_empr.destroy  
                     
if __name__ == '__main__':
    Fenetre_main().mainloop()
